﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PaymentHelper.Core.RelatedObject;

namespace PaymentHelper.Core
{
    public partial class Order
    {
        #region Contructor
        public Order()
        {
            OrderId = Guid.NewGuid().ToString();
            OrderStatus = RelatedObject.OrderStatus.Pending;
            OtherFee = decimal.Zero;
            HandlingFee = decimal.Zero;
            TaxFee = decimal.Zero;
            ShippingFee = decimal.Zero;
            CustomerCurrency = "VND";
            PaymentStatus = RelatedObject.PaymentStatus.Pending;
        }
        #endregion

        #region Properties

        /* Mã hóa đơn
         * Tổng giá trị
         * Phí giao hàng
         * Phí thuế
         * Phí khác
         * Chi tiết hóa đơn (ds sản phẩm + đơn giá)
         * Loại tiền tệ
         * Địa chỉ ghi vào hóa đơn
         * Địa chi giao hàng
         * Tình trạng đơn hàng
         * Tình trạng thanh toán
         * Phương thức thanh toán
         * Thẻ thanh toán (nếu có)
         * ...
         */

        public virtual string OrderId { get; set; }

        public virtual decimal OrderTotal { get; protected set; }

        public virtual decimal CartTotal { get; protected set; }

        public virtual decimal ShippingFee { get; set; }

        public virtual decimal HandlingFee { get; set; }

        public virtual decimal TaxFee { get; set; }

        public virtual decimal OtherFee { get; set; }

        public virtual IList<OrderItem> ListOrderItem { get; set; }

        public virtual string CustomerCurrency { get; set; }

        public virtual Address BillingAddress { get; set; }

        public virtual Address ShippingAddress { get; set; }

        public virtual OrderStatus OrderStatus { get; set; }

        public virtual PaymentStatus PaymentStatus { get; set; }

        public virtual string PaymentMethodSystemName { set; get; }

        public virtual CreditCard CreditCard { get; set; }

        #endregion

        #region Methods

        /// <summary>
        /// Update total price of order
        /// </summary>
        public void UpdateTotalPrice(decimal handlingFee)
        {
            HandlingFee = handlingFee;
            decimal cartTotal = 0;

            if (ListOrderItem == null || ListOrderItem.Count == 0)
                cartTotal = 0;

            foreach (var item in ListOrderItem)
                cartTotal += item.TotalPrice;

            CartTotal = cartTotal;

            OrderTotal = HandlingFee + ShippingFee + TaxFee + CartTotal + OtherFee;
        }

        #endregion

    }
}
